Cascade এবং Fetch Type এর কনফিগারেশন

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Entity Relationships (One-to-One, One-to-Many, Many-to-Many)
298

Cascade এবং Fetch Type স্প্রিং বুট জেপিএ (JPA) এর গুরুত্বপূর্ণ কনফিগারেশন অপশন, যা ডেটাবেস সম্পর্কিত ক্লাসগুলোর মধ্যে সম্পর্ক স্থাপন এবং সম্পর্কিত ডেটা লোড করার সময় আচরণ নির্ধারণ করে। এটি ORM (Object-Relational Mapping) এর অংশ হিসেবে ডেটাবেস টেবিল এবং জাভা ক্লাসের মধ্যে সম্পর্ককে আরও পরিষ্কার এবং কার্যকরীভাবে পরিচালনা করতে সহায়তা করে।

Cascade

Cascade হল একটি কনসেপ্ট যা ব্যবহারকারীদের parent Entity-এর উপর কার্যকরী CRUD অপারেশনগুলি child Entity গুলিতে স্বয়ংক্রিয়ভাবে প্রয়োগ করতে সহায়তা করে। এটি একাধিক Entity-এর মধ্যে সম্পর্কের সাথে কাজ করতে ব্যবহৃত হয়।

স্প্রিং বুট JPA তে Cascade অপশন ব্যবহার করা হয় যখন একটি Entity আরেকটি Entity এর উপর নির্ভরশীল হয় এবং আপনি চান যে parent Entity-এ পরিবর্তন হলে তার child Entity তেও একই পরিবর্তন আসবে।

Cascade Types

JPA-তে CascadeType এর কিছু সাধারণ অপশন রয়েছে, যেমন:

  1. CascadeType.ALL: সব ধরনের Cascade অপারেশন (Persist, Merge, Remove, Refresh, Detach) প্রয়োগ হবে।
  2. CascadeType.PERSIST: যখন parent Entity সেভ হবে, তখন child Entity গুলি সেভ হবে।
  3. CascadeType.MERGE: যখন parent Entity মর্জ হবে, তখন child Entity গুলিও মর্জ হবে।
  4. CascadeType.REMOVE: যখন parent Entity ডিলিট হবে, তখন child Entity গুলি ডিলিট হবে।
  5. CascadeType.REFRESH: parent Entity রিফ্রেশ হলে child Entity গুলি রিফ্রেশ হবে।
  6. CascadeType.DETACH: যখন parent Entity ডিসঅ্যাসোসিয়েট হবে, তখন child Entity গুলি ডিসঅ্যাসোসিয়েট হবে।

Cascade এর কনফিগারেশন উদাহরণ

ধরা যাক, আপনার একটি Order Entity এবং একটি Product Entity রয়েছে, যেখানে একটি Order অনেক Product এর সাথে সম্পর্কিত (One-to-Many Relationship)। এখানে আমরা CascadeType.ALL ব্যবহার করব, যাতে Order Entity সেভ বা ডিলিট হলে, সাথে সংশ্লিষ্ট Product গুলিও সেভ বা ডিলিট হয়।

1. CascadeType.ALL উদাহরণ

import javax.persistence.*;
import java.util.List;

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String orderNumber;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "order")
    private List<Product> products;

    // Getters and Setters
}
import javax.persistence.*;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;

    // Getters and Setters
}

ব্যাখ্যা:
এখানে, Order Entity একটি One-to-Many সম্পর্ক স্থাপন করেছে Product Entity এর সাথে এবং cascade = CascadeType.ALL ব্যবহার করা হয়েছে। এর ফলে যখন Order Entity সেভ বা ডিলিট হবে, তখন সংশ্লিষ্ট Product গুলিও স্বয়ংক্রিয়ভাবে সেভ বা ডিলিট হবে।


Fetch Type

FetchType একটি কনফিগারেশন যা সম্পর্কিত Entity-এর ডেটা লোড করার আচরণ নির্ধারণ করে। সাধারণত দুটি FetchType আছে:

  1. FetchType.LAZY: এটি ডিফল্ট মুড, যার মাধ্যমে সম্পর্কিত ডেটা শুধুমাত্র প্রয়োজন হলে (ডেলিগেট বা ব্যবহার করার সময়) লোড হয়।
  2. FetchType.EAGER: এটি সম্পর্কিত সমস্ত ডেটা একবারে লোড করে, অর্থাৎ যখন মূল Entity লোড হবে তখন তার সম্পর্কিত সকল Entity-ও একসাথে লোড হবে।

FetchType এর কনফিগারেশন উদাহরণ

1. FetchType.LAZY উদাহরণ

import javax.persistence.*;
import java.util.List;

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String orderNumber;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "order")
    private List<Product> products;

    // Getters and Setters
}

ব্যাখ্যা:
এখানে @OneToMany(fetch = FetchType.LAZY) ব্যবহার করা হয়েছে, যার মাধ্যমে Order Entity এর সাথে সম্পর্কিত Product গুলি তখনই লোড হবে, যখন আপনি সেগুলিকে এক্সেস করবেন (লেজি লোডিং)।

2. FetchType.EAGER উদাহরণ

import javax.persistence.*;
import java.util.List;

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String orderNumber;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "order")
    private List<Product> products;

    // Getters and Setters
}

ব্যাখ্যা:
এখানে @OneToMany(fetch = FetchType.EAGER) ব্যবহার করা হয়েছে, যার মাধ্যমে যখন Order Entity লোড হবে, তখন তার সাথে সম্পর্কিত Product গুলোও একসাথে লোড হবে (ইগার লোডিং)।


Cascade এবং FetchType একসাথে ব্যবহার

এখন, আপনি চাইলে Cascade এবং FetchType একসাথে ব্যবহার করতে পারেন। এর মাধ্যমে আপনি ডেটা লোড এবং সম্পর্কিত Entity-গুলোর উপর CRUD অপারেশন একই সাথে কনফিগার করতে পারবেন।

1. Cascade এবং FetchType একসাথে উদাহরণ

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String orderNumber;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
    private List<Product> products;

    // Getters and Setters
}

ব্যাখ্যা:
এখানে CascadeType.ALL এবং FetchType.LAZY একসাথে ব্যবহৃত হয়েছে। এর মাধ্যমে Order Entity সেভ হলে তার সম্পর্কিত Product গুলিও সেভ হবে, কিন্তু Product গুলি শুধুমাত্র তখনই লোড হবে যখন আপনি সেগুলি এক্সেস করবেন (লেজি লোডিং)।


উপসংহার

Cascade এবং FetchType স্প্রিং বুট JPA-তে গুরুত্বপূর্ণ কনফিগারেশন অপশন, যা Entity সম্পর্কিত ডেটাবেস টেবিলগুলির CRUD অপারেশন এবং ডেটা লোডিং আচরণ নিয়ন্ত্রণ করে। Cascade ব্যবহার করলে আপনি সম্পর্কিত Entity-এর উপর CRUD অপারেশন স্বয়ংক্রিয়ভাবে প্রয়োগ করতে পারেন এবং FetchType ব্যবহারের মাধ্যমে আপনি ডেটা লোডিং আচরণ নিয়ন্ত্রণ করতে পারেন। এই কনফিগারেশনগুলির মাধ্যমে আপনার ডেটাবেস সম্পর্ক এবং ডেটা প্রসেসিং আরও কার্যকরী ও নমনীয় হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...